Continuous Integration (CI) এবং Continuous Deployment (CD) হল আধুনিক সফটওয়্যার ডেভেলপমেন্টের দুটি গুরুত্বপূর্ণ কৌশল। এই দুটি প্রক্রিয়া সফটওয়্যার ডেভেলপমেন্টের প্রক্রিয়াকে আরও স্বয়ংক্রিয়, দ্রুত, এবং নির্ভরযোগ্য করে তোলে, যা শেষ পর্যন্ত কোড ডেলিভারি এবং নতুন ফিচারের দ্রুত রিলিজ নিশ্চিত করে।
এখানে আমরা CI/CD এর ধারণা, উপকারিতা এবং রুবিতে এটি কিভাবে কার্যকরীভাবে ব্যবহার করা যায়, তা আলোচনা করব।
১. Continuous Integration (CI)
Continuous Integration (CI) হল একটি ডেভেলপমেন্ট প্র্যাকটিস যেখানে ডেভেলপাররা নিয়মিত (প্রায় প্রতিদিন বা একাধিক বার) তাদের কোড রিপোজিটরিতে একত্রিত করে এবং এতে একটি স্বয়ংক্রিয় বিল্ড এবং টেস্ট চালানো হয়। এর উদ্দেশ্য হল কোড একত্রিত করার সময় কোনো ত্রুটি বা কনফ্লিক্ট শীঘ্রই সনাক্ত করা, যাতে সেগুলি দ্রুত সমাধান করা যায়।
CI এর মূল লক্ষ্য:
- Automation: কোডের বিল্ডিং এবং টেস্টিং প্রক্রিয়াগুলিকে স্বয়ংক্রিয় করা।
- Early Detection of Bugs: কোড একত্রিত করার সময় বাগ বা কনফ্লিক্ট চিহ্নিত করা, যাতে তা শীঘ্রই সমাধান করা যায়।
- Improved Collaboration: একাধিক ডেভেলপার সহজে কোড শেয়ার করতে পারেন এবং কাজের অগ্রগতি মনিটর করা যায়।
CI Pipeline:
CI প্রক্রিয়ায় সাধারণত build, test, এবং deploy স্টেপগুলি অন্তর্ভুক্ত থাকে।
CI পিপলাইন উদাহরণ:
- ডেভেলপার কোড রিপোজিটরিতে কোড পুশ করে।
- CI টুল (যেমন Jenkins, CircleCI, Travis CI) কোডটি ক্লোন করে, বিল্ড এবং টেস্ট চালায়।
- কোডে কোনো ত্রুটি বা কনফ্লিক্ট থাকলে, ডেভেলপারকে জানানো হয় এবং তা শীঘ্রই সমাধান করা হয়।
- বিল্ড এবং টেস্ট সফল হলে, কোডটি পরবর্তী স্তরের জন্য প্রস্তুত হয়।
CI এর সুবিধা:
- কোড একত্রিত করার সময় দ্রুত সমস্যা চিহ্নিত করা যায়।
- বাগের সংখ্যা কমে যায় কারণ দ্রুত টেস্ট এবং ফিডব্যাক পাওয়া যায়।
- কোড ডেলিভারি প্রক্রিয়া দ্রুত ও নির্ভরযোগ্য হয়।
২. Continuous Deployment (CD)
Continuous Deployment (CD) হল CI এর পরবর্তী স্তর, যেখানে কোড রিলিজ প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে পরিচালিত হয়। CD নিশ্চিত করে যে, কোড টেস্টিং পাস করার পর, এটি স্বয়ংক্রিয়ভাবে প্রোডাকশন পরিবেশে চলে যায়। অর্থাৎ, প্রতিটি সফল বিল্ড এবং টেস্টের পর কোডটি উৎপাদন (production) পরিবেশে ডেপ্লয় হয়ে যায়।
CD এর উদ্দেশ্য:
- Automation: কোড ডেপ্লয়মেন্ট এবং রিলিজ প্রক্রিয়াগুলি স্বয়ংক্রিয়ভাবে সম্পন্ন করা।
- Rapid Delivery: কোডের নতুন ফিচার বা বাগ ফিক্স দ্রুত ব্যবহারকারীদের কাছে পৌঁছানো।
- Reduced Manual Intervention: কোড রিলিজের জন্য মানুষের হস্তক্ষেপ কমানো, যা সময় এবং ত্রুটি কমায়।
CD Pipeline:
- CI Stage: কোড ডেভেলপাররা পুশ করার পর, CI প্রক্রিয়ায় কোড বিল্ড ও টেস্ট হয়।
- Staging/Pre-production: সফল CI টেস্টের পর কোড staging বা pre-production পরিবেশে ডেপ্লয় করা হয়।
- Production: পরবর্তী ধাপে কোড সফলভাবে প্রোডাকশন পরিবেশে চলে আসে।
CD এর সুবিধা:
- Fast Releases: নতুন ফিচার বা বাগ ফিক্স খুব দ্রুত উৎপাদন পরিবেশে চলে যায়।
- Increased Efficiency: ম্যানুয়াল ডেপ্লয়মেন্ট কমে যাওয়ায় সময় বাঁচে এবং ভুলের সুযোগ কমে যায়।
- Faster Feedback: ফিচার এবং আপডেট দ্রুত গ্রাহকের কাছে পৌঁছানোর কারণে দ্রুত ফিডব্যাক পাওয়া যায়।
৩. CI/CD টুলস
রুবি বা অন্য যে কোন ভাষায় CI/CD বাস্তবায়ন করতে কিছু জনপ্রিয় টুলস রয়েছে:
৩.১ Jenkins:
Jenkins একটি ওপেন সোর্স অটোমেশন টুল যা বিল্ড, ডিপ্লয়মেন্ট এবং টেস্টিং অটোমেট করতে ব্যবহৃত হয়। এটি একটি জনপ্রিয় CI/CD টুল যা অনেক প্লাগইন এবং কাস্টমাইজেশনের জন্য ব্যবহৃত হয়।
৩.২ CircleCI:
CircleCI একটি ক্লাউড-বেসড CI/CD প্ল্যাটফর্ম যা কোড টেস্টিং এবং ডেপ্লয়মেন্ট প্রক্রিয়া সহজ করে।
৩.৩ Travis CI:
Travis CI একটি জনপ্রিয় CI/CD প্ল্যাটফর্ম যা গিটহাব রিপোজিটরির সঙ্গে ইন্টিগ্রেট করা যায় এবং কোড বিল্ড, টেস্ট এবং ডিপ্লয়মেন্ট স্বয়ংক্রিয়ভাবে পরিচালনা করতে সহায়তা করে।
৩.৪ GitLab CI/CD:
GitLab CI/CD টুলটি গিটল্যাব রেপোজিটরি ইন্টিগ্রেশন সহ CI/CD প্রক্রিয়া সরাসরি পরিচালনা করতে ব্যবহৃত হয়।
৩.৫ GitHub Actions:
GitHub Actions একটি CI/CD টুল যা GitHub রিপোজিটরির জন্য বিল্ড, টেস্ট, ডিপ্লয়মেন্ট সহ অন্যান্য অটোমেশন কাজ সহজ করে তোলে।
৪. CI/CD Pipeline Example with Rails
রুবি অন রেলস অ্যাপ্লিকেশনের জন্য CI/CD পিপলাইন তৈরি করতে Travis CI বা GitHub Actions ব্যবহার করা যেতে পারে। নিচে একটি সাধারণ GitHub Actions কনফিগারেশন উদাহরণ দেওয়া হলো:
৪.১ GitHub Actions Example:
.github/workflows/rails.yml ফাইল তৈরি করুন:
name: Ruby on Rails CI/CD
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
test:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:12
ports:
- 5432:5432
env:
POSTGRES_PASSWORD: postgres
options: >-
--health-cmd="pg_isready -U postgres"
--health-interval=10s
--health-timeout=5s
--health-retries=5
steps:
- uses: actions/checkout@v2
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: 3.0
- name: Install dependencies
run: |
gem install bundler
bundle install
- name: Run tests
run: |
bundle exec rake db:create
bundle exec rake db:migrate
bundle exec rspecএখানে, GitHub Actions-এর মাধ্যমে, যখনই main ব্রাঞ্চে কোড পুশ হবে, এটি PostgreSQL ডাটাবেসে ডেটা তৈরি করে এবং RSpec দিয়ে টেস্ট রান করবে।
৪.২ Deploy to Heroku (CD example)
Heroku-তে অ্যাপ ডিপ্লয় করতে GitHub Actions বা Travis CI ব্যবহার করা যেতে পারে।
Example using Travis CI:
deploy:
provider: heroku
api_key:
secure: <YOUR-HEROKU-API-KEY>
app: <YOUR-HEROKU-APP-NAME>এখানে, Travis CI ব্যবহার করে আপনার রেলস অ্যাপটি Heroku-তে স্বয়ংক্রিয়ভাবে ডিপ্লয় হবে।
সারসংক্ষেপ
- Continuous Integration (CI) হল একটি প্রক্রিয়া যেখানে ডেভেলপাররা নিয়মিত কোড একত্রিত করে এবং এটি স্বয়ংক্রিয়ভাবে বিল্ড ও টেস্ট হয়।
- Continuous Deployment (CD) হল CI এর পরবর্তী স্তর, যেখানে কোড টেস্ট এবং বিল্ড পাস করার পর এটি স্বয়ংক্রিয়ভাবে প্রোডাকশনে ডেপ্লয় হয়।
- CI/CD Tools: জনপ্রিয় টুলস যেমন Jenkins, CircleCI, Travis CI, GitLab CI/CD, GitHub Actions ইত্যাদি CI/CD প্রক্রিয়া অটোমেট করতে ব্যবহৃত হয়।
- CI/CD Pipeline: বিল্ড, টেস্ট, এবং ডেপ্লয় প্রক্রিয়া অটোমেট করার জন্য একটি পিপলাইন তৈরি করা হয়, যা কোড ডেলিভারির গতি বাড়ায় এবং রিলিজের ভুল কমায়।
এই কৌশলগুলি কোড ডেভেলপমেন্ট,
টেস্টিং, এবং ডিপ্লয়মেন্ট প্রক্রিয়াকে দ্রুত, নির্ভরযোগ্য এবং প্রডাকশন-গ্রেড করতে সাহায্য করে।
Read more